perm filename GRAPHS.LST[HAL,HE] blob
sn#156802 filedate 1975-04-29 generic text, type T, neo UTF8
PALX 222 04/29/75 10:55:58 PAGE 1
GRAPHS PAL[HAL,HE] PAGE 5 Graph routines
INVL.R+2 132 5 2 .ERROR Multiple definition for ND
PALX 222 04/29/75 10:55:58 PAGE 2
GRAPHS PAL[HAL,HE] PAGE 6 Graph routines
CRTS+2 240 6 2 .ERROR Multiple definition for ND
PALX 222 04/29/75 10:55:58 PAGE 3
GRAPHS PAL[HAL,HE] PAGE 7 Graph routines
GETV.R+6 316 7 2 .ERROR Multiple definition for ND
EV.RTS+2 472 7 31 .ERROR Multiple definition for CLC
PALX 222 04/29/75 10:55:58 PAGE 4
GRAPHS PAL[HAL,HE] PAGE 8 Graph routines
EVLCLC+2 474 8 2 .ERROR Multiple definition for ND
EVLCLC+2 474 8 2 .ERROR Multiple definition for CLC
PALX 222 04/29/75 10:55:58 PAGE 5
GRAPHS PAL[HAL,HE] PAGE 9 Graph routines
W2SPC 566 9 3 CONSECUTIVE TERMS
000566 000000 W2SPC: SPC W2ID,MP2WD,2,20,1,20,25
W3SPC 570 9 4 CONSECUTIVE TERMS
000570 000000 W3SPC: SPC W3ID,MP3WD,3,20,1,20,25
GET3WD+10 722 9 37 NO END STMT
PALX 222 04/29/75 10:55:58 PAGE 6
HALHED PAL[HAL,HE] PAGE 1
COMMENT ⊗ VALID 00004 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 .SBTTL ASSEMBLY FLAGS
C00005 00003 routine calling and defining macros.
C00008 00004 macros for handling tables & blocks
C00014 ENDMK
C⊗;
PALX 222 04/29/75 10:55:58 PAGE 7
HALHED PAL[HAL,HE] PAGE 2 ASSEMBLY FLAGS
.SBTTL ASSEMBLY FLAGS
;This macro gives the switch SW a default value VAL
.MACRO STSW SW,VAL
.IFNDF SW
SW == VAL ;if do not have a value already, give it one
.ENDC
.ENDM
STSW FLOAT,1 ;0 => no floating point capacity
.IFNDF FLOAT
FLOAT == 1 ;if do not have a value already, give it one
.ENDC
.SBTTL DEFS -- standard definitions for HAL runtime routines
; PROGRAM DEFINITIONS
000004 ERRTRP==4 ;time out and error trap
000010 ILGINS==10 ;illegal instruction
000104 CLKTRP==104 ;clock trap
050000 RUG=50000 ;Restart of RUG
177776 PS=177776 ;processor status word
177560 KBIS=177560 ;keyboard input status
177562 KBIR=177562 ;keyboard input register
177564 KBOS=177564 ;keyboard output status
177566 KBOR=177566 ;keyboard output register
172544 CLKCNT=172544 ;clock counter
172542 CLKSET=172542 ;clock set register
172540 CLKS=172540 ;clock status
000500 STRT11=500 ;starting address of program
000150 IBUF==150 ;start of input buffer from 11
000160 OBUF==160 ;start of output buffer to 11
077776 HCOR=77776 ;highest useable word in core
;REGISTER DEFINITIONS
000007 PC=%7 ;program counter
000006 SP=%6 ;stack pointer
000005 RF==%5 ;Display pointer
000005 R5=%5
000004 R4=%4 ;Saved across procedure calls
000003 R3=%3 ;Saved across procedure calls
000002 R2=%2 ;Saved across procedure calls
000001 R1=%1 ;temp
000000 R0=%0 ;temp
000005 AC5==%5 ;Temp Floating point register
PALX 222 04/29/75 10:55:58 PAGE 8
HALHED PAL[HAL,HE] PAGE 2.1 DEFS -- standard definitions for HAL runtime routines
000004 AC4==%4 ; " " " "
000003 AC3==%3 ; " " " "
000002 AC2==%2 ; " " " "
000001 AC1==%1 ; " " " "
000000 AC0==%0 ; " " " "
;MARK DEFINITIONS
006400 MARK0 == 6400 ;MARK 0
006401 MARK1 == 6401 ;MARK 1
006402 MARK2 == 6402 ;ETC.
006403 MARK3 == 6403
006404 MARK4 == 6404
006405 MARK5 == 6405
PALX 222 04/29/75 10:55:58 PAGE 9
HALHED PAL[HAL,HE] PAGE 3 DEFS -- standard definitions for HAL runtime routines
;routine calling and defining macros.
;Coded by RHT 9/74.
;This should be used at the start of routines which reference
; parameters off the RF stack. It gives the parameters
; symbolic names for clarity of coding.
;For example,
;
; ROUTINE FOO,<A,B>
;
;Goes to
;
; A==4
; B==2
;FOO:
.MACRO ROUTINE ID,ARGS
.IFNB ARGS
NNNN==0
.IRP II,<ARGS> ;Raise NNNN to twice the number of args.
NNNN==NNNN+2
.ENDM
.IRP II,<ARGS> ;Assign each arg NNNN and decrease same.
.IFDF II
.IF1
.ERROR Multiple definition for II
.ENDC
.IFF
II == NNNN
NNNN == NNNN-2
.ENDC
.ENDM
.ENDC
ID:
.ENDM
;This is useful in calling rountines which reference parameters off
; the RF stack. It sets up the stack properly, but does not
; save R0 or R1.
.MACRO CALL ID,ARGS
MOV RF,-(SP) ;Save RF
NNNN == 6400 ;This is a MARK 0 instruction
.IFNB ARGS
.IRP II,<ARGS>
MOV II,-(SP);Push an argument
NNNN == NNNN+1 ;Make NNNN the next MARK instruction.
.ENDM
.ENDC
PALX 222 04/29/75 10:55:58 PAGE 10
HALHED PAL[HAL,HE] PAGE 3.1 DEFS -- standard definitions for HAL runtime routines
MOV #NNNN,-(SP) ;Push the mark instruction.
MOV SP,RF ;Set up the display in RF.
JSR PC,ID ;Call the routine
.ENDM
;This macro is a temporary(ha,ha) method of defining floating point
;constants. LABIL is the constant name and MSB and LSB its two
;16 bit octal parts.
.MACRO FP LABIL,MSB,LSB
.MACRO LABIL
.WORD MSB,LSB
.ENDM
.ENDM
;Macros to tell value of variable during assembly
.MACRO TELL VAR
TELL2 VAR,\VAR
.ENDM
.MACRO TELL2 S,V
.PRINT /S = /
.PRINT /V
/
.ENDM
PALX 222 04/29/75 10:55:58 PAGE 11
HALHED PAL[HAL,HE] PAGE 4 DEFS -- standard definitions for HAL runtime routines
;macros for handling tables & blocks
.MACRO XX SYM ;Just gives SYM the next number.
.IFDF SYM
.IF1
.ERROR You are using SYM in two ways!!!
.ENDC
.ENDC
SYM == II
II == II+2
.ENDM
.MACRO PUTLOC ADR,VAL
II==.
.= ADR
VAL
.=II
.ENDM
.MACRO TT INX,VAL
.=II+INX
VAL
.ENDM
PALX 222 04/29/75 10:55:58 PAGE 12
GRAPHS PAL[HAL,HE] PAGE 1 DEFS -- standard definitions for HAL runtime routines
COMMENT ⊗ VALID 00009 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 .SBTTL Graph routines
C00003 00003 NXTTIM
C00004 00004 ROUTINE INVLDT,<ND>
C00005 00005 ROUTINE CHANGE,<ND,VNEW>
C00007 00006 ROUTINE GETVAL,<ND>
C00008 00007 ROUTINE EVALND,<ND,T>
C00010 00008 ROUTINE ADDCLC,<ND,CLC>
C00011 00009 GET2WD & GET3WD (eventually go somewhere else)
C00013 ENDMK
C⊗;
PALX 222 04/29/75 10:55:58 PAGE 13
GRAPHS PAL[HAL,HE] PAGE 2 Graph routines
.SBTTL Graph routines
;Graph structure definitions
;RHT 9/74
;CELL LINKS
000000 II==0
XX DATUM
.IFDF DATUM
.IF1
.ERROR You are using DATUM in two ways!!!
.ENDC
.ENDC
000000 DATUM == II
000002 II == II+2
XX LINKF
.IFDF LINKF
.IF1
.ERROR You are using LINKF in two ways!!!
.ENDC
.ENDC
000002 LINKF == II
000004 II == II+2
XX LINKB
.IFDF LINKB
.IF1
.ERROR You are using LINKB in two ways!!!
.ENDC
.ENDC
000004 LINKB == II
000006 II == II+2
;GRAPH NODES
000000 II==0
XX NXTGN ;CHAIN OF ALL GNODES IN THE WORLD
.IFDF NXTGN
.IF1
.ERROR You are using NXTGN in two ways!!!
.ENDC
.ENDC
000000 NXTGN == II
000002 II == II+2
XX PRVGN
.IFDF PRVGN
.IF1
.ERROR You are using PRVGN in two ways!!!
.ENDC
.ENDC
000002 PRVGN == II
PALX 222 04/29/75 10:55:58 PAGE 14
GRAPHS PAL[HAL,HE] PAGE 2.1 Graph routines
000004 II == II+2
XX INVMRK ;USED AS FLAG
.IFDF INVMRK
.IF1
.ERROR You are using INVMRK in two ways!!!
.ENDC
.ENDC
000004 INVMRK == II
000006 II == II+2
XX GNVAL ;POINTER AT VALUE
.IFDF GNVAL
.IF1
.ERROR You are using GNVAL in two ways!!!
.ENDC
.ENDC
000006 GNVAL == II
000010 II == II+2
XX GNDEPS ;DEPENDENT GRAPH NODES
.IFDF GNDEPS
.IF1
.ERROR You are using GNDEPS in two ways!!!
.ENDC
.ENDC
000010 GNDEPS == II
000012 II == II+2
XX GNCLCS ;CALCULATOR LIST (DBL LINKED)
.IFDF GNCLCS
.IF1
.ERROR You are using GNCLCS in two ways!!!
.ENDC
.ENDC
000012 GNCLCS == II
000014 II == II+2
XX GNCHGS ;CHANGE LIST
.IFDF GNCHGS
.IF1
.ERROR You are using GNCHGS in two ways!!!
.ENDC
.ENDC
000014 GNCHGS == II
000016 II == II+2
;CALCULATOR CELL
000000 II==0
XX NXTCLC ;LIST LINK
.IFDF NXTCLC
.IF1
.ERROR You are using NXTCLC in two ways!!!
.ENDC
PALX 222 04/29/75 10:55:58 PAGE 15
GRAPHS PAL[HAL,HE] PAGE 2.2 Graph routines
.ENDC
000000 NXTCLC == II
000002 II == II+2
XX NEEDED ;LIST OF NEEDED NODES
.IFDF NEEDED
.IF1
.ERROR You are using NEEDED in two ways!!!
.ENDC
.ENDC
000002 NEEDED == II
000004 II == II+2
XX FORM ;SOME SORT OF CODE TO EVAL
.IFDF FORM
.IF1
.ERROR You are using FORM in two ways!!!
.ENDC
.ENDC
000004 FORM == II
000006 II == II+2
;CHANGER CELL
000000 II==0
XX NXTCHG
.IFDF NXTCHG
.IF1
.ERROR You are using NXTCHG in two ways!!!
.ENDC
.ENDC
000000 NXTCHG == II
000002 II == II+2
XX CHGCOD
.IFDF CHGCOD
.IF1
.ERROR You are using CHGCOD in two ways!!!
.ENDC
.ENDC
000002 CHGCOD == II
000004 II == II+2
PALX 222 04/29/75 10:55:58 PAGE 16
GRAPHS PAL[HAL,HE] PAGE 3 Graph routines
; NXTTIM
;
; JSR PC,NXTTIM
;
;RETURNS TIME←TIME+1 IN R0
;IF TIME GOES NEGATIVE THEN GOES THRU & SETS ALL POSITIVE MARK
;CELLS TO NEGATIVE, & THEN SETS TIME TO 1
000000 000000 TIME: 0
000002 000000 GNODES: 0 ;LIST OF ALL GRAPH NODES IN THE WORLD
000004 005267 177770 NXTTIM: INC TIME ;TIME←TIME+1
000010 016700 177764 MOV TIME,R0
000014 003371 BGT TIME,NXT.RT ;OK?
000016 016700 177760 MOV GNODES,R0 ;
000022 001410 BEQ NXTT.3 ;DID WE HAVE ANY??
000024 005760 000004 NXTT.1: TST INVMRK(R0) ;YES
000030 003402 BLE NXTT.2 ;WAS INVMRK POSITIVE
000032 005460 000004 NEG INVMRK(R0) ;YES, NEGATE IT
000036 016000 000000 NXTT.2: MOV NXTGN(R0),R0 ;GO ON TO NEXT
000042 001370 BNE NXTT.1 ;IF ANY
000044 005200 NXTT.3: INC R0 ;R0←0+1
000046 010067 177726 MOV R0,TIME ;TIME IS 1 AGAIN
000052 000207 NXT.RT: RTS PC
PALX 222 04/29/75 10:55:58 PAGE 17
GRAPHS PAL[HAL,HE] PAGE 4 Graph routines
ROUTINE INVLDT,<ND>
.IFNB ND
000000 NNNN==0
.IRP II,<ND> ;Raise NNNN to twice the number of args.
NNNN==NNNN+2
.ENDM
000002 NNNN==NNNN+2
.IRP II,<ND> ;Assign each arg NNNN and decrease same.
.IFDF II
.IF1
.ERROR Multiple definition for II
.ENDC
.IFF
II == NNNN
NNNN == NNNN-2
.ENDC
.ENDM
.IFDF ND
.IF1
.ERROR Multiple definition for ND
.ENDC
.IFF
ND == NNNN
NNNN == NNNN-2
.ENDC
.ENDC
INVLDT:
000054 016500 000002 MOV ND(RF),R0
000060 004767 000002 JSR PC,INVLR0
000064 000205 RTS RF
000066 005760 000004 INVLR0: TST INVMRK(R0) ;IS IT DEAD YET?
000072 001016 BNE INVL.R ;ALREADY INVALID??
000074 005360 000004 INVL.1: DEC INVMRK(R0) ;NO, MAKE IT SO
000100 010246 MOV R2,-(SP) ;SAFE REGISTER
000102 016002 000010 MOV GNDEPS(R0),R2 ;DEPENDENTS
000106 001407 BEQ INVL.X ;IF ANY
000110 016200 000000 INVL.2: MOV DATUM(R2),R0 ;GET A DEPENDENT
000114 004767 177746 JSR PC,INVLR0 ;AND INVALIDATE IT
000120 016202 000002 MOV LINKF(R2),R2 ;GO TO NEXT
000124 001371 BNE INVL.2 ;IF ANY
000126 012602 INVL.X: MOV (SP)+,R2 ;GET BACK SCRATCH REGISTER
000130 000207 INVL.R: RTS PC
PALX 222 04/29/75 10:55:58 PAGE 18
GRAPHS PAL[HAL,HE] PAGE 5 Graph routines
ROUTINE CHANGE,<ND,VNEW>
.IFNB ND,VNEW
000000 NNNN==0
.IRP II,<ND,VNEW> ;Raise NNNN to twice the number of args.
NNNN==NNNN+2
.ENDM
000002 NNNN==NNNN+2
000004 NNNN==NNNN+2
.IRP II,<ND,VNEW> ;Assign each arg NNNN and decrease same.
.IFDF II
.IF1
.ERROR Multiple definition for II
.ENDC
.IFF
II == NNNN
NNNN == NNNN-2
.ENDC
.ENDM
.IFDF ND
.IF1
.ERROR Multiple definition for ND
.ENDC
.IFF
ND == NNNN
NNNN == NNNN-2
.ENDC
.IFDF VNEW
.IF1
.ERROR Multiple definition for VNEW
.ENDC
.IFF
VNEW == NNNN
NNNN == NNNN-2
.ENDC
.ENDC
CHANGE:
000132 016500 000002 MOV ND(RF),R0 ;THE NODE
000136 004767 177724 JSR PC,INVLR0 ;INVALIDATE IT
000142 016500 000002 MOV ND(RF),R0 ;SINCE NO PROMISES WERE MADE
000146 010246 MOV R2,-(SP) ;SAVE A COUPLE REGISTERS
000150 010346 MOV R3,-(SP)
000152 016002 000006 MOV GNVAL(R0),R2 ;OLD VALUE
000156 016560 000004 000006 MOV VNEW(RF),GNVAL(R0) ;PUT AWAY NEW VALUE
000164 016003 000014 MOV GNCHGS(R0),R3 ;CHANGERS
000170 001414 BEQ CH.XXX ;MAY BE ABOUT DONE
CH.1: CALL CRTS,<R2,VOLD(RF)> ;***** ACTUALLY MUST CALL A CHANGE ROUT HERE
000172 010546 MOV RF,-(SP) ;Save RF
006400 NNNN == 6400 ;This is a MARK 0 instruction
.IFNB R2,VOLD(RF)
PALX 222 04/29/75 10:55:58 PAGE 19
GRAPHS PAL[HAL,HE] PAGE 5.1 Graph routines
.IRP II,<R2,VOLD(RF)>
MOV II,-(SP);Push an argument
NNNN == NNNN+1 ;Make NNNN the next MARK instruction.
.ENDM
000174 010246 MOV R2,-(SP);Push an argument
006401 NNNN == NNNN+1 ;Make NNNN the next MARK instruction.
CH.1+4 176 5 12 VOLD UNDEFINED
000176 016546 000000 MOV VOLD(RF),-(SP);Push an argument
006402 NNNN == NNNN+1 ;Make NNNN the next MARK instruction.
.ENDC
000202 012746 006402 MOV #NNNN,-(SP) ;Push the mark instruction.
000206 010605 MOV SP,RF ;Set up the display in RF.
000210 004767 000022 JSR PC,CRTS ;Call the routine
000214 016303 000000 MOV NXTCHG(R3),R3 ;CDR DOWN LIST
000220 001364 BNE CH.1
000222 016500 000002 CH.XXX: MOV ND(RF),R0
000226 005060 000004 CLR INVMRK(R0)
000232 012603 MOV (SP)+,R3
000234 012602 MOV (SP)+,R2
000236 000205 CRTS: RTS RF
PALX 222 04/29/75 10:55:58 PAGE 20
GRAPHS PAL[HAL,HE] PAGE 6 Graph routines
ROUTINE GETVAL,<ND>
.IFNB ND
000000 NNNN==0
.IRP II,<ND> ;Raise NNNN to twice the number of args.
NNNN==NNNN+2
.ENDM
000002 NNNN==NNNN+2
.IRP II,<ND> ;Assign each arg NNNN and decrease same.
.IFDF II
.IF1
.ERROR Multiple definition for II
.ENDC
.IFF
II == NNNN
NNNN == NNNN-2
.ENDC
.ENDM
.IFDF ND
.IF1
.ERROR Multiple definition for ND
.ENDC
.IFF
ND == NNNN
NNNN == NNNN-2
.ENDC
.ENDC
GETVAL:
000240 016500 000002 MOV ND(RF),R0
000244 004767 000002 JSR PC,GETVR0
000250 000205 RTS RF
000252 005760 000004 GETVR0: TST INVMRK(R0) ;WAS IT VALID ALREADY
000256 001414 BEQ GETV.R ;JUST RETURN IF IT WAS
000260 010046 MOV R0,-(SP) ;SAVE EXTRA COPY FOR RANDOMNESS
000262 010546 MOV RF,-(SP)
000264 010046 MOV R0,-(SP) ;EVALNODE(ND,TIME←TIME+1)
000266 004767 177512 JSR PC,NXTTIM
000272 010046 MOV R0,-(SP)
000274 012746 006402 MOV #MARK2,-(SP)
000300 010605 MOV SP,RF
000302 004767 000010 JSR PC,EVALND
000306 012600 MOV (SP)+,R0 ;GET NODE BACK
000310 016000 000006 GETV.R: MOV GNVAL(R0),R0 ;GET THE VALUE CELL
000314 000207 RTS PC ;RETURN
PALX 222 04/29/75 10:55:58 PAGE 21
GRAPHS PAL[HAL,HE] PAGE 7 Graph routines
ROUTINE EVALND,<ND,T>
.IFNB ND,T
000000 NNNN==0
.IRP II,<ND,T> ;Raise NNNN to twice the number of args.
NNNN==NNNN+2
.ENDM
000002 NNNN==NNNN+2
000004 NNNN==NNNN+2
.IRP II,<ND,T> ;Assign each arg NNNN and decrease same.
.IFDF II
.IF1
.ERROR Multiple definition for II
.ENDC
.IFF
II == NNNN
NNNN == NNNN-2
.ENDC
.ENDM
.IFDF ND
.IF1
.ERROR Multiple definition for ND
.ENDC
.IFF
ND == NNNN
NNNN == NNNN-2
.ENDC
.IFDF T
.IF1
.ERROR Multiple definition for T
.ENDC
.IFF
T == NNNN
NNNN == NNNN-2
.ENDC
.ENDC
EVALND:
000316 016500 000002 MOV ND(RF),R0
000322 016001 000004 MOV INVMRK(R0),R1 ;IF INVMRK = 0
000326 001460 BEQ EV.RTS ;THEN RETURN
000330 020165 000004 CMP R1,T(RF) ;IF INVMRK=T
000334 001455 BEQ EV.RTS ;THEN RETURN
000336 010246 MOV R2,-(SP) ;SAVE REGISTERS
000340 010346 MOV R3,-(SP)
000342 016002 000012 MOV GNCLCS(R0),R2 ;CALCULATORS
000346 001446 BEQ EV.XXX ;IF ANY
000350 016203 000002 EV.CLP: MOV NEEDED(R2),R3 ;NEEDED LIST
000354 001422 BEQ EV.NOK ;ALL NEEDS MET YET?
EV.NLP: CALL EVALND,<DATUM(R3),T(RF)> ;NO, GET NEXT
000356 010546 MOV RF,-(SP) ;Save RF
PALX 222 04/29/75 10:55:58 PAGE 22
GRAPHS PAL[HAL,HE] PAGE 7.1 Graph routines
006400 NNNN == 6400 ;This is a MARK 0 instruction
.IFNB DATUM(R3),T(RF)
.IRP II,<DATUM(R3),T(RF)>
MOV II,-(SP);Push an argument
NNNN == NNNN+1 ;Make NNNN the next MARK instruction.
.ENDM
000360 016346 000000 MOV DATUM(R3),-(SP);Push an argument
006401 NNNN == NNNN+1 ;Make NNNN the next MARK instruction.
000364 016546 000004 MOV T(RF),-(SP);Push an argument
006402 NNNN == NNNN+1 ;Make NNNN the next MARK instruction.
.ENDC
000370 012746 006402 MOV #NNNN,-(SP) ;Push the mark instruction.
000374 010605 MOV SP,RF ;Set up the display in RF.
000376 004767 177714 JSR PC,EVALND ;Call the routine
000402 016300 000000 MOV DATUM(R3),R0 ;SEE IF NEED WAS MET?
000406 005760 000004 TST INVMRK(R0) ;DID WE WIN
000412 001021 BNE EV.NXC ;BRANCH IF STILL NOT VALID
000414 016303 000002 MOV LINKF(R3),R3 ;TRY NEXT NEEDED
000420 001356 BNE EV.NLP
EV.NOK: CALL EVLCLC,<R2> ;EVALUATE CALCULATOR
000422 010546 MOV RF,-(SP) ;Save RF
006400 NNNN == 6400 ;This is a MARK 0 instruction
.IFNB R2
.IRP II,<R2>
MOV II,-(SP);Push an argument
NNNN == NNNN+1 ;Make NNNN the next MARK instruction.
.ENDM
000424 010246 MOV R2,-(SP);Push an argument
006401 NNNN == NNNN+1 ;Make NNNN the next MARK instruction.
.ENDC
000426 012746 006401 MOV #NNNN,-(SP) ;Push the mark instruction.
000432 010605 MOV SP,RF ;Set up the display in RF.
000434 004767 000032 JSR PC,EVLCLC ;Call the routine
000440 016501 000002 MOV ND(RF),R1 ;PICK UP ND
000444 010061 000006 MOV R0,GNVAL(R1) ;SAVE VALUE IN IT
000450 005061 000004 CLR INVMRK(R1) ;REVALIDATE THE NODE
000454 000403 BR EV.XXX ;EXIT
000456 016202 000000 EV.NXC: MOV NXTCLC(R2),R2 ;TRY NEXT CALCULATOR
000462 001332 BNE EV.CLP ;IF ANY TO TRY
000464 012603 EV.XXX: MOV (SP)+,R3 ;RESTORE ACS
000466 012602 MOV (SP)+,R2
000470 000205 EV.RTS: RTS RF ;RETURN
ROUTINE EVLCLC,<CLC>
.IFNB CLC
000000 NNNN==0
.IRP II,<CLC> ;Raise NNNN to twice the number of args.
NNNN==NNNN+2
.ENDM
PALX 222 04/29/75 10:55:58 PAGE 23
GRAPHS PAL[HAL,HE] PAGE 7.2 Graph routines
000002 NNNN==NNNN+2
.IRP II,<CLC> ;Assign each arg NNNN and decrease same.
.IFDF II
.IF1
.ERROR Multiple definition for II
.ENDC
.IFF
II == NNNN
NNNN == NNNN-2
.ENDC
.ENDM
.IFDF CLC
.IF1
.ERROR Multiple definition for CLC
.ENDC
.IFF
CLC == NNNN
NNNN == NNNN-2
.ENDC
.ENDC
EVLCLC:
000472 000205 RTS RF
PALX 222 04/29/75 10:55:58 PAGE 24
GRAPHS PAL[HAL,HE] PAGE 8 Graph routines
ROUTINE ADDCLC,<ND,CLC>
.IFNB ND,CLC
000000 NNNN==0
.IRP II,<ND,CLC> ;Raise NNNN to twice the number of args.
NNNN==NNNN+2
.ENDM
000002 NNNN==NNNN+2
000004 NNNN==NNNN+2
.IRP II,<ND,CLC> ;Assign each arg NNNN and decrease same.
.IFDF II
.IF1
.ERROR Multiple definition for II
.ENDC
.IFF
II == NNNN
NNNN == NNNN-2
.ENDC
.ENDM
.IFDF ND
.IF1
.ERROR Multiple definition for ND
.ENDC
.IFF
ND == NNNN
NNNN == NNNN-2
.ENDC
.IFDF CLC
.IF1
.ERROR Multiple definition for CLC
.ENDC
.IFF
CLC == NNNN
NNNN == NNNN-2
.ENDC
.ENDC
ADDCLC:
000474 010246 MOV R2,-(SP) ;SAVE A REGISTER
000476 010346 MOV R3,-(SP) ;SAVE A REGISTER
000500 016503 000002 MOV ND(RF),R3 ;THE NODE
000504 016501 000241 MOV CLC(RF),R1 ;THE CALCULATOR
000510 016361 000012 000000 MOV GNCLCS(R3),NXTCLC(R1) ;CURRENT CALCULATOR LIST
000516 016102 000002 MOV NEEDED(R1),R2 ;LIST OF NEEDED NODES
000522 001416 BEQ ACLC.X ;ALL DONE
000524 004767 000152 ACLC.1: JSR PC,GET2WD ;GET A TWO-WORD CELL
000530 010360 000000 MOV R3,DATUM(R0) ;THIS NODE IS NOW A DEPENDENT OF
000534 016201 000000 MOV DATUM(R2),R1 ;THE NEEDED NODE
000540 016160 000010 000002 MOV GNDEPS(R1),LINKF(R0) ;ADD IT TO THE DEPENDENTS LIST
000546 010061 000010 MOV R0,GNDEPS(R1) ;
000552 016202 000002 MOV LINKF(R2),R2 ;NEXT NEEDED NODE
PALX 222 04/29/75 10:55:58 PAGE 25
GRAPHS PAL[HAL,HE] PAGE 8.1 Graph routines
000556 001362 BNE ACLC.1 ;
000560 012603 ACLC.X: MOV (SP)+,R3 ;RESTORE ACS
000562 012602 MOV (SP)+,R2
000564 000205 RTS R5
PALX 222 04/29/75 10:55:58 PAGE 26
GRAPHS PAL[HAL,HE] PAGE 9 Graph routines
;GET2WD & GET3WD (eventually go somewhere else)
W2SPC 566 9 3 SPC UNDEFINED
W2SPC 566 9 3 CONSECUTIVE TERMS
000566 000000 W2SPC: SPC W2ID,MP2WD,2,20,1,20,25
W3SPC 570 9 4 SPC UNDEFINED
W3SPC 570 9 4 CONSECUTIVE TERMS
000570 000000 W3SPC: SPC W3ID,MP3WD,3,20,1,20,25
MP2WD 572 9 6 TAG UNDEFINED
000572 105760 000000 MP2WD: TSTB TAG(R0)
000576 001022 BNE MPRTS ;ALREADY DID THIS ONE
000600 004775 000002 JSR PC,@2(RF) ;
000604 010246 MOV R2,-(SP) ;
000606 010002 MOV R0,R2 ;SAVE RESULT OF ROUT
000610 016200 000000 MPDLF: MOV DATUM(R2),R0 ;DO DATUM
MPDLF+4 614 9 12 MARKR0 UNDEFINED
000614 004767 177160 JSR PC,MARKR0 ;
000620 010062 000000 MOV R0,DATUM(R2) ;
000624 016200 000002 MOV LINKF(R2),R0 ;DO LINKF
MPDLF+20 630 9 15 MARKR0 UNDEFINED
000630 004767 177144 JSR PC,MARKR0 ;A LONG LIST WILL PDLOV (ALAS)
000634 010062 000002 MOV R0,LINKF(R2) ; BUT WE DONT HAVE ANY LONG LISTS (I HOPE)
000640 010200 MOV R2,R0 ;RETURN VALUE
000642 012602 MOV (SP)+,R2 ;
000644 000207 MPRTS: RTS PC
MP3WD 646 9 21 TAG UNDEFINED
000646 105760 000000 MP3WD: TSTB TAG(R0) ;DID WE DO THIS
000652 001374 BNE MPRTS ;YES
000654 004775 000002 JSR PC,@2(RF) ;
000660 010246 MOV R2,-(SP)
000662 010002 MOV R0,R2
000664 016200 000004 MOV LINKB(R2),R0 ;DO LINKB
MP3WD+22 670 9 27 MARKR0 UNDEFINED
000670 004767 177104 JSR PC,MARKR0
000674 010062 000004 MOV R0,LINKB(R2) ;
000700 000743 BR MPDLF ;GO DO DATUM & LINKF
; GET A TWO-WORD CELL (OF POINTERS)
GET2WD 702 9 32 W2ID UNDEFINED
000702 012700 000000 GET2WD: MOV #W2ID,R0
GET2WD+4 706 9 33 GETBLK UNDEFINED
000706 000167 177066 JMP GETBLK
GET3WD 712 9 35 W3ID UNDEFINED
000712 012700 000000 GET3WD: MOV #W3ID,R0
GET3WD+4 716 9 36 GETBLK UNDEFINED
000716 000167 177056 JMP GETBLK
PALX 222 04/29/75 10:55:58 PAGE 27
GRAPHS PAL[HAL,HE] PAGE 9.1 Graph routines
GET3WD+10 722 9 37 NO END STMT
PALX 222 04/29/75 10:55:58 PAGE 28
GRAPHS PAL[HAL,HE] PAGE 9 ***SYMBOL TABLE***
AC0 000000RH INVL.R 000130 STRT11 000500
AC1 000001RH INVL.X 000126 T 000004H
AC2 000002RH INVLDT 000054 TAG 000000U
AC3 000003RH INVLR0 000066 TIME 000000
AC4 000004RH INVMRK 000004H VNEW 000004H
AC5 000005RH KBIR 177562 VOLD 000000U
ACLC.1 000524 KBIS 177560 W2ID 000000U
ACLC.X 000560 KBOR 177566 W2SPC 000566
ADDCLC 000474 KBOS 177564 W3ID 000000U
CH.1 000172 LINKB 000004H W3SPC 000570
CH.XXX 000222 LINKF 000002H
CHANGE 000132 MARK0 006400H
CHGCOD 000002H MARK1 006401H
CLKCNT 172544 MARK2 006402H
CLKS 172540 MARK3 006403H
CLKSET 172542 MARK4 006404H
CLKTRP 000104H MARK5 006405H
CRTS 000236 MARKR0 000000U
DATUM 000000H MP2WD 000572
ERRTRP 000004H MP3WD 000646
EV.CLP 000350 MPDLF 000610
EV.NLP 000356 MPRTS 000644
EV.NOK 000422 ND 000002H
EV.NXC 000456 NEEDED 000002H
EV.RTS 000470 NNNN 000004H
EV.XXX 000464 NXT.RT 000052
EVALND 000316 NXTCHG 000000H
EVLCLC 000472 NXTCLC 000000H
FLOAT 000001H NXTGN 000000H
FORM 000004H NXTT.1 000024
GET2WD 000702 NXTT.2 000036
GET3WD 000712 NXTT.3 000044
GETBLK 000000U NXTTIM 000004
GETV.R 000310 OBUF 000160H
GETVAL 000240 PC 000007R
GETVR0 000252 PRVGN 000002H
GNCHGS 000014H PS 177776
GNCLCS 000012H R0 000000R
GNDEPS 000010H R1 000001R
GNODES 000002 R2 000002R
GNVAL 000006H R3 000003R
HCOR 077776 R4 000004R
IBUF 000150H R5 000005R
II 000004H RF 000005RH
ILGINS 000010H RUG 050000
INVL.1 000074 SP 000006R
INVL.2 000110 SPC 000000U
PALX 222 04/29/75 10:55:58 PAGE 29
GRAPHS PAL[HAL,HE] PAGE 9 ***SYMBOL TABLE***
24 ERRORS DETECTED
1.5 WDS AVG INSN LENGTH
9 SECONDS RUN-TIME